﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Dominio;
using Capa_Persistencia_NH.Interface;

namespace Capa_Negocio.Gestionar_Instrumentos
{
    public class AdministrarInstrumentosMusicalesImpl: IAdministrarInstrumentosMusicales
    {
        #region Dependencias
        IMarcaInstrumento marcaInstrumentoDAO = null;
        IModeloInstrumento modeloInstrumentoDAO = null;
        ITipoInstrumento tipoInstrumentoDAO = null;
        IInstrumentoMusical InstrumentosMusicalesDAO = null;
        #endregion

        public InstrumentosMusicales InscribirInstrumentos(string nombreInstrumento, int codigoMarca, int codigoModelo,
            int codigoTipoInstrumento, string annoFabricacion, decimal costoAlquiler, string caracteristicas, int cantidadInstrumentos,
            Boolean disponibilidad, Boolean estado)
        {
            TipoInstrumento objTipoInstrumento;
            ModeloInstrumento objModeloInstrumento;
            MarcaInstrumento objMarcaInstrumento;
            InstrumentosMusicales objInstrumentoMusicales;
            // Excepción si falta algún dato requerido
            if (nombreInstrumento == null || codigoMarca == 0 || codigoModelo==0 || codigoMarca==0||
                cantidadInstrumentos == 0)
                throw new DatosInsuficientesException("Faltan datos para crear el Instrumento");

            objTipoInstrumento = tipoInstrumentoDAO.Obtener(codigoTipoInstrumento);
            objModeloInstrumento = modeloInstrumentoDAO.Obtener(codigoModelo);
            objMarcaInstrumento = marcaInstrumentoDAO.Obtener(codigoMarca);

            ICollection<InstrumentosMusicales> instrumentoEncontrado = InstrumentosMusicalesDAO.ListarXNombre(nombreInstrumento);
            if (instrumentoEncontrado.Count > 0)
            {
                throw new EntidadRepetidaException("El Instrumento ya existe");
            }
            objInstrumentoMusicales = new InstrumentosMusicales();

            objInstrumentoMusicales.NombreInstrumento = nombreInstrumento;
            objInstrumentoMusicales.MarcaInstrumento = objMarcaInstrumento;
            objInstrumentoMusicales.ModeloInstrumento = objModeloInstrumento;
            objInstrumentoMusicales.TipoInstrumento = objTipoInstrumento;
            objInstrumentoMusicales.AnnoFabricacion = annoFabricacion;
            objInstrumentoMusicales.CostoAlquiler = costoAlquiler;
            objInstrumentoMusicales.Caracteristicas = caracteristicas;
            objInstrumentoMusicales.CantidadInstrumentos = cantidadInstrumentos;
            objInstrumentoMusicales.Disponibilidad = disponibilidad;
            objInstrumentoMusicales.Estado = estado;

            return InstrumentosMusicalesDAO.Crear(objInstrumentoMusicales);
        }


        #region Adminsitrar Instrumentos Musicales
        public ICollection<InstrumentosMusicales> ListarInstrumentos()
        {
            return InstrumentosMusicalesDAO.ListarTodos();
        }
        #endregion

        #region administrar tipo de instrumento
        public TipoInstrumento CrearTipoInstrumento(TipoInstrumento objTipoInstrumento)
        {
            return tipoInstrumentoDAO.Crear(objTipoInstrumento);
        }
        public ICollection<TipoInstrumento> ListarTipoInstrumento()
        {
            return tipoInstrumentoDAO.ListarTodos();
        }
        #endregion

        #region Administrar Modelo instrumento
        public ModeloInstrumento CrearModeloInstrumento(ModeloInstrumento objModeloInstrumento)
        {
            return modeloInstrumentoDAO.Crear(objModeloInstrumento);
        }
        public ICollection<ModeloInstrumento> ListaModelo()
        {
            return modeloInstrumentoDAO.ListarTodos();
        }
        #endregion
        
        #region Adminstrar Marca instrumento
        public ICollection<MarcaInstrumento> ListaMarca()
        {
            return marcaInstrumentoDAO.ListarTodos();
        }
        public MarcaInstrumento CrearMarcaInstrumento(MarcaInstrumento objMarcaInstrumento)
        {
            return marcaInstrumentoDAO.Crear(objMarcaInstrumento);
        }
        #endregion
        
    }
}
